package com.njit.office.service.impl;

import com.njit.office.dao.SavedFileMapper;
import com.njit.office.dataobject.SavedFile;
import com.njit.office.model.Result;
import com.njit.office.service.FileService;
import com.njit.office.utils.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.*;

import java.util.Date;
import java.util.UUID;

@Service("FileService")
public class FileServiceImpl implements FileService {

    public static final String savedPath = ".\\ALL_FILES";

    @Autowired
    SavedFileMapper savedFileMapper;


    static {
        File file = new File(savedPath);
        if (!file.exists()) {
            file.mkdirs();
        }
    }


    @Override
    public Result saveFile(File file) {
        //uuid为标识
        String fileId = UUID.randomUUID().toString().replace("-", "");

        boolean result = FileUtils.saveFile(file,savedPath ,fileId + "." + FileUtils.getFileSuffix(file));

        Result res = new Result();
        if(result){
            SavedFile savedFile = new SavedFile();
            savedFile.setId(fileId);
            savedFile.setFileName(file.getName());
            savedFile.setFileSize((double)file.length());
            savedFile.setLastModified(new Date(file.lastModified()));
            savedFile.setGmtCreated(new Date());
            savedFileMapper.insert(savedFile);
            res.setSuccess(true);
            res.setErrCode("14");
            res.setErrMsg("文件存储成功");
            res.setData(fileId);
        }else{
            res.setSuccess(false);
            res.setErrCode("10");
            res.setErrMsg("文件存储失败");
        }
        return res;
    }

    @Override
    public Result saveFile(InputStream inputStream,String savedName) {

        int fileSize = 0;
        try {
            fileSize = inputStream.available();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //uuid为标识
        String fileId = UUID.randomUUID().toString().replace("-", "");

        boolean result = FileUtils.saveFile(inputStream,savedPath ,fileId + "." + FileUtils.getFileSuffix(savedName));

        Result res = new Result();
        if(result){
            SavedFile savedFile = new SavedFile();
            savedFile.setId(fileId);
            savedFile.setFileName(savedName);
            savedFile.setFileSize((double)fileSize);
            savedFile.setLastModified(new Date());
            savedFile.setGmtCreated(new Date());

            savedFileMapper.insert(savedFile);
            res.setSuccess(true);
            res.setErrMsg("文件存储成功");
            res.setData(fileId);
        }else{
            res.setSuccess(false);
            res.setErrMsg("文件存储失败");
        }
        return res;
    }

    @Override
    public Result getFile(String fileId) {
        SavedFile savedFile = savedFileMapper.selectByPrimaryKey(fileId);
        Result res = new Result();
        if (savedFile != null) {
            String id =  savedFile.getId();
            File file = new File(savedPath + File.separator+ id + "." + FileUtils.getFileSuffix(savedFile.getFileName()));

            if(file.exists()){
                res.setSuccess(true);
                res.setData(file);
                return res;
            }else{
                res.setSuccess(false);
                res.setErrCode("12");
                res.setErrMsg("服务器未找到文件");
            }
        }else{
            res.setSuccess(false);
            res.setErrCode("11");
            res.setErrMsg("数据库没查到文件");
        }
        return res;
    }

    @Override
    public Result deleteFile(String fileId) {
        SavedFile savedFile = savedFileMapper.selectByPrimaryKey(fileId);
        Result res = new Result();
        if (savedFile != null) {
            String id =  savedFile.getId();
            File file = new File(savedPath + File.separator + id + "." + FileUtils.getFileSuffix(savedFile.getFileName()));
            if(file.exists()){
                file.delete();
                int s = savedFileMapper.deleteByPrimaryKey(fileId);
                if (s > 0) {
                    res.setSuccess(true);
                    res.setErrCode("13");
                    res.setErrMsg("删除文件成功");
                }
                return res;
            }else{
                res.setSuccess(false);
                res.setErrCode("12");
                res.setErrMsg("服务器未找到文件");
            }
        }else{
            res.setSuccess(false);
            res.setErrCode("11");
            res.setErrMsg("数据库没查到文件");
        }
        return res;
    }
}
